import {
  CHANGE_CITY,
  SAVE_GROUPCITY,
  RECORD_ADDRESS,
  SAVE_GEOHASH,
  RECORD_ADDRESSNAME,
  RECORD_USERINFO,
  GET_USERINFO,
  OUT_LOGIN,
  SAVE_AVANDER,
  RETSET_NAME,
  ADD_CART,
  SAVE_ADDDETAIL,
  MINUS_CART,
  INIT_BUYCART,
  CLEAR_CART,
  SAVE_ADDRESS,
  ADD_ADDRESS,
  SAVE_SHOPID,
  CONFIRM_REMARK,
  CONFIRM_INVOICE,
  CHOOSE_SEARCH_ADDRESS,
  CHOOSE_ADDRESS,
  CONFIRM_ADDRESS,
  DELETE_ADDRESS,
  EDIT_ADDRESS,
  NEED_VALIDATION,
  SAVE_CART_ID_SIG,
  SAVE_ORDER_PARAM,
  CHANGE_ORDER_PARAM,
  ORDER_SUCCESS,
  SAVE_ORDER,
  BUY_CART,
  SAVE_QUESTION
} from './mutation-types.js'

import { setStore, getStore } from '@/assets/js/mUtils'

export default {
  [CHANGE_CITY] (state, { city, cityId }) {
    state.city = city
    state.cityId = cityId
    try {
      localStorage.city = city
      localStorage.cityId = cityId
    } catch (e) {}
  },

  [SAVE_GROUPCITY] (state, groupcity) {
    state.groupcity = groupcity
  },

  // 记录当前经度纬度
  [RECORD_ADDRESS] (state, {
    latitude,
    longitude
  }) {
    state.latitude = latitude
    state.longitude = longitude
  },

  // 保存geohash
  [SAVE_GEOHASH] (state, geohash) {
    state.geohash = geohash
    setStore('geohash', state.geohash)
  },

  // 记录当前地址
  [RECORD_ADDRESSNAME] (state, addressName) {
    state.addressName = addressName
    setStore('addressName', state.addressName)
  },

  // 记录用户信息
  [RECORD_USERINFO] (state, userInfo) {
    state.userInfo = userInfo
    state.login = true
    setStore('userId', userInfo.user_id)
  },

  // 获取用户信息存入vuex
  [GET_USERINFO] (state, userInfo) {
    if (state.userInfo && (state.userInfo.username !== userInfo.username)) {
      return
    }
    if (!state.login) {
      return
    }
    if (!userInfo.message) {
      state.userInfo = {...userInfo}
    } else {
      state.userInfo = null
    }
  },

  // 保存图片
  [SAVE_AVANDER] (state, avatarImgPath) {
    state.avatarImgPath = avatarImgPath
  },

  // 修改用户名
  [RETSET_NAME] (state, username) {
    state.userInfo = Object.assign({}, state.userInfo, {username})
  },

  // 删除地址列表
  [SAVE_ADDRESS] (state, newAdress) {
    state.removeAddress = newAdress
  },

  // 增加地址
  [ADD_ADDRESS] (state, obj) {
    state.removeAddress = [obj, ...state.removeAddress]
  },

  // 添加地址name
  [SAVE_ADDDETAIL] (state, addAddress) {
    state.addAddress = addAddress
  },

  // 退出登录
  [OUT_LOGIN] (state) {
    state.userInfo = {}
    state.login = false
  },

  // 加入购物车
  [ADD_CART] (state, {
    shopId,
    categoryId,
    itemId,
    foodId,
    name,
    price,
    specs,
    packingFee,
    skuId,
    stock
  }) {
    let cart = state.cartList
    let shop = cart[shopId] = (cart[shopId] || {})
    let category = shop[categoryId] = (shop[categoryId] || {})
    let item = category[itemId] = (category[itemId] || {})
    if (item[foodId]) {
      item[foodId]['num']++
    } else {
      item[foodId] = {
        'num': 1,
        'id': foodId,
        'name': name,
        'price': price,
        'specs': specs,
        'packing_fee': packingFee,
        'sku_id': skuId,
        'stock': stock
      }
    }
    state.cartList = {...cart}
    // 存入localStorage
    setStore('buyCart', state.cartList)
  },

  // 移出购物车
  [MINUS_CART] (state, {
    shopId,
    categoryId,
    itemId,
    foodId,
    name,
    price,
    specs
  }) {
    let cart = state.cartList
    let shop = (cart[shopId] || {})
    let category = (shop[categoryId] || {})
    let item = (category[itemId] || {})
    if (item && item[foodId]) {
      if (item[foodId]['num'] > 0) {
        item[foodId]['num']--
        state.cartList = {...cart}
        // 存入localStorage
        setStore('buyCart', state.cartList)
      } else {
        // 商品数量为0，则清空当前商品的信息
        item[foodId] = null
      }
    }
  },

  // 网页初始化时从本地缓存获取购物车数据
  [INIT_BUYCART] (state) {
    let initCart = getStore('buyCart')
    if (initCart) {
      state.cartList = JSON.parse(initCart)
    }
  },

  // 清空当前商品的购物车信息
  [CLEAR_CART] (state, shopId) {
    state.cartList[shopId] = null
    state.cartList = {...state.cartList}
    setStore('buyCart', state.cartList)
  },

  // 保存商铺id
  [SAVE_SHOPID] (state, shopid) {
    state.shopid = shopid
  },

  // 记录订单页面用户选择的备注, 传递给订单确认页面
  [CONFIRM_REMARK] (state, {
    remarkText,
    inputText
  }) {
    state.remarkText = remarkText
    state.inputText = inputText
  },

  // 是否开发票
  [CONFIRM_INVOICE] (state, invoice) {
    state.invoice = invoice
  },

  // 选择搜索的地址
  [CHOOSE_SEARCH_ADDRESS] (state, place) {
    state.searchAddress = place
  },

  // 选择的地址
  [CHOOSE_ADDRESS] (state, {
    address,
    index
  }) {
    state.choosedAddress = address
    state.addressIndex = index
    setStore('choosedAddressIndex', state.addressIndex)
  },

  // 确认订单页添加新的地址
  [CONFIRM_ADDRESS] (state, newAddress) {
    state.newAddress.push(newAddress)
  },

  // 删除地址
  [DELETE_ADDRESS] (state, index) {
    state.newAddress.splice(index, 1)
  },

  // 编辑地址
  [EDIT_ADDRESS] (state, {
    index,
    newAddress
  }) {
    state.newAddress.splice(index, 1, newAddress)
  },

  // 保存下单需要验证的返回值
  [NEED_VALIDATION] (state, needValidation) {
    state.needValidation = needValidation
  },

  // 保存下单后购物id 和 sig
  [SAVE_CART_ID_SIG] (state, {
    cartId,
    sig
  }) {
    state.cartId = cartId
    state.sig = sig
  },

  // 保存下单参数，用户验证页面调用
  [SAVE_ORDER_PARAM] (state, orderParam) {
    state.orderParam = orderParam
  },

  // 修改下单参数
  [CHANGE_ORDER_PARAM] (state, newParam) {
    state.orderParam = Object.assign({}, state.orderParam, newParam)
  },

  // 下单成功，保存订单返回信息
  [ORDER_SUCCESS] (state, order) {
    state.cartPrice = null
    state.orderMessage = order
  },

  // 进入订单详情页前保存该订单信息
  [SAVE_ORDER] (state, orderDetail) {
    state.orderDetail = orderDetail
  },

  // 会员卡价格纪录
  [BUY_CART] (state, price) {
    state.cartPrice = price
  },

  // 保存所选问题标题和详情
  [SAVE_QUESTION] (state, question) {
    state.question = {...question}
  }
}
